package org.crystal.tradecraft.provider;

import org.crystal.tradecraft.model.binance.enumeration.TimeInForce;
import org.crystal.tradecraft.model.binance.market.KLine;
import org.crystal.tradecraft.model.binance.param.KLineQuery;
import org.crystal.tradecraft.model.binance.param.NewOrder;
import org.crystal.tradecraft.model.binance.trade.OrderResponse;
import org.crystal.tradecraft.model.binance.wallet.CoinInfo;

import java.util.List;

public interface TradeActionsProvider {

    List<KLine> firstTimeQueryMarketKLines(KLineQuery kLineQuery);

    List<KLine> queryMarketKLines(KLineQuery kLineQuery);

    void testNewOrder(NewOrder newOrder);

    CoinInfo getCoinInfo(String name);

    OrderResponse newOrder(NewOrder newOrder);

    OrderResponse buy(String symbol, Double price, Double quantity);

    OrderResponse sell(String symbol, Double price, Double quantity);

    OrderResponse stopLoss(String symbol, Double quantity, Double stopPrice);

    OrderResponse stopLossLimit(String symbol, Double price, Double quantity, Double stopPrice, TimeInForce timeInForce);

    OrderResponse takeProfit(String symbol, Double quantity, Double stopPrice);

    OrderResponse takeProfitLimit(String symbol, Double price, Double quantity, Double stopPrice, TimeInForce timeInForce);

    boolean testEnv();
}
